git 的简单介绍
是什么?
Git 是目前世界上最先进的分布式版本控制系统。
为什么
- 适合分布式开发
- 速度快,灵活
- 优秀的解决冲突能力
- 版本管理
工作流程
- 克隆项目
- 修改项目
- 提交更改
- 拉取远端最新的更改(如果别人在你修改期间有更改推送过,则需要拉取)
- 如本地修改跟远端修改有冲突,则解决冲突
- 重新提交
推送远端
对应流程图如下:
常用命令
- git init
用于初始化项目 - git clone
用于克隆项目 - git add
添加修改文件。
其中 git add .代表添加所有修改过的问题件,git add 文件路径,代表添加特定的文件。 - git commit
提交更改日志,例如 git commit -m “增加功能” - git fetch
检查远端是否有更改 - git pull
拉取远端的最新的代码,例如 git pull –rebase.
rebase 和 merge 的区别在于:merge 操作会生成一个新的节点,之前的提交分开显示。而 rebase 操作不会生成新的节点,是将两个分支融合成一个线性的提交。
所以我们通常 git pull 都会加上 rebase 的参数 - git push
推送本地更改到服务器,例如 git push orgin master - git branch
查看当前分支,而如果加上-r 参数,代表查看远程分支 git branch -r - git checkout
切换分支 例如,git checkout -b develop,切换到 develop 分支,如果本地已经有 develop 分支,则 git checkout develop - git tag
为节点打日志,例如,我们要为 1b2e1d63ff 打上 1.0 的标签:git tag 1.0 1b2e1d63ff - git reset
丢弃所有的本地所有的更改,git reset HEAD –hard,同时也可以用此命令回到之前的节点,如果我要返回到上一个节点(注意,此返回指的是你本地返回,而不是远端返回),git reset HEAD^ –hard - git status
查看本地缓存修改记录
常用技巧
现在有 a、b、c、d、e,5 个提交点,我需要切换回滚到 c 节点,丢弃的 d,e 节点
git reset HEAD^^ --hard(或者 git reset c 点的 sha 码 --hard)
git push origin HEAD --force
把别的分支某个提交点提交到当前分支
例如 develop 上有提交点 a(sha 码为 1b2e1d63ff),需要把 a 也提交到 master 上去.
git checkout master
git cherry-pick -x 1b2e1d63ff,-x 代表着保留原始作者信息
如果途中产生冲突,则按照标准的解决冲突方法去解决。然后重新 commit 即可
查找某个文件的某行修改记录
新接手了一个项目,里面某一行代码不知道为什么原作者这样写,需要查看对应的提交点记录才能知道为啥当初这样写
例如要查看 a.java 文件的修改记录
git blame **/a.java(注意文件路径),得到如下结果
1 | ^5cdd7bd (Rinfon 2018-04-02 13:14:34 +0800 68) LocalTextView apStepBack; |
这时候已经得到了 sha 码,就可以通过 git show 20997902,可以得到修改的信息。
分支管理
主要分支
- master 分支。仅且只有一个主分支,用于提供正式版本
- develop 分支,开发分支,用于日常开发,如果一个版本开发完整,测试通过,则合并到 develop 里面去。合并的时候需要加上 –no-ff,快进式合并,保证版本的演进清晰。
临时分支 - feature 分支,当需要做一个新功能时,需要基于 develop 开一个 feature 分支,即使 feature 不完成,也不会影响 develop 的进度.
hotfix 分支,用于修改 bug 的分支,基于 master 分出来的。修改结束后,合并到 master 和 develop 上去
但这只是一个基础想法,并不是适用于所有的项目的,而我们需要做的,就是对此策略加以修改,变成适合自己的分支管理。